SQL UNIONの使い方について詳しく知りたいときはないでしょうか。
そんな中で悩むことは、
・SQL UNIONとUNION ALLとの違いがわからない
ですよね。
今回はそんなお悩みを解決する
・SQL UNIONとUNION ALLとの違い
についてまとめます!
もくじ
SQL UNIONとは
SQL UNIONは、SQL(Structured Query Language)において、
複数のSELECTクエリの結果を結合するための演算子です。
UNION演算子は、データベース内の複数のテーブルからデータを抽出し、結合して一つのセットデータとして取得する際に使用されます。
SQL UNIONとUNION ALLとの違いは
SQL UNIONとUNION ALLとの違いについて説明をします。
UNION ALL演算子も、複数のSELECTクエリの結果を結合します。
ただし、重複する行を削除することはありません。
そのため、UNION ALLを使用すると、重複する行も含まれたままの結果が返されます。
ですので、UNION演算子との違いは重複する行を削除しているか否かという点になり、
重複があればその分のレコード数に差異が生じます。
UNION ALL演算子:重複する行を削除しない
次にSQL UNIONとUNION ALLの使い方について具体的にみてみましょう。
SQL UNIONの使い方
SQL UNION演算子の使い方について説明をします。
SQL UNION演算子は前述のとおりデータベース内の異なるテーブルからデータを結合し、重複する行を削除したい場合に使用します。
例えば、顧客情報が別々のテーブルに格納されていて、それらをまとめて取得したいが、重複する行を排除したいといった場合に適しています。
SQL UNIONの構文
SQL UNIONの構文は以下の通りです。
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
SQL UNIONのサンプルコード
サンプルとして、顧客情報を保持する2つのテーブル、”Customers_A”と”Customers_B”を仮定します。
Customers_A テーブル
ID | Last_Name | First_Name |
---|---|---|
1 | takahashi | takahiro |
2 | ito | daisuke |
3 | suzuki | daisuke |
Customers_B テーブル
ID | Last_Name | First_Name |
---|---|---|
3 | suzuki | daisuke |
4 | ito | natsumi |
5 | suzuki | keiko |
テーブル作成とデータ挿入をするサンプルコードは以下の通りです。
-- Customers_A テーブルの作成
CREATE TABLE Customers_A (
ID INT PRIMARY KEY,
Last_Name VARCHAR(50),
First_Name VARCHAR(50)
);
-- データの挿入
INSERT INTO Customers_A (ID, Last_Name, First_Name )
VALUES
(1, 'takahashi', 'takahiro'),
(2, 'ito', 'daisuke'),
(3, 'suzuki', 'daisuke');
-- Customers_B テーブルの作成
CREATE TABLE Customers_B (
ID INT PRIMARY KEY,
Last_Name VARCHAR(50),
First_Name VARCHAR(50)
);
-- データの挿入
INSERT INTO Customers_B (ID, Last_Name, First_Name )
VALUES
(3, 'suzuki', 'daisuke'),
(4, 'ito', 'natsumi'),
(5, 'suzuki', 'keiko');
以下のようにUNION演算子を使用して、2つのテーブルから取得した顧客情報を結合し、重複を除いた結果セットを取得します。
SELECT ID, Last_Name, First_Name FROM Customers_A
UNION
SELECT ID, Last_Name, First_Name FROM Customers_B;
結果です。
ID | Last_Name | First_Name |
---|---|---|
1 | takahashi | takahiro |
2 | ito | daisuke |
3 | suzuki | daisuke |
4 | ito | natsumi |
5 | suzuki | keiko |
ID3の行が重複していたので削除された結果が返ります。
SQL UNION ALLの使い方
SQL UNION ALL演算子の使い方について説明をします。
SQL UNION ALL演算子は前述のとおりデータベース内の異なるテーブルからデータを結合し、重複を保持したままの結果を得たいときに使用します。
SQL UNION ALLの構文
SQL UNION ALLの構文は以下の通りです。
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
SQL UNION ALLのサンプルコード
サンプルは上記と同じく、顧客情報を保持する2つのテーブル、”Customers_A”と”Customers_B”を仮定します。
サンプルコードは以下の通りです。
SELECT ID, Last_Name, First_Name FROM Customers_A
UNION ALL
SELECT ID, Last_Name, First_Name FROM Customers_B;
結果です。
ID | Last_Name | First_Name |
---|---|---|
1 | takahashi | takahiro |
2 | ito | daisuke |
3 | suzuki | daisuke |
3 | suzuki | daisuke |
4 | ito | natsumi |
5 | suzuki | keiko |
ID3の行が重複していても削除されず、重複した状態での結果が返ります。
UNIONにおいて重複が排除される条件
UNION演算子において重複が排除される条件について説明をします。
UNION演算子において重複が排除されるかどうかは、行全体の値が条件になるのではなく、
SELECT文で指定したカラムの値が重複するかどうかで判断されます。
つまり、SELECT文で指定したカラムの値が比較先の値と完全に一致する場合に重複が排除されます。
例えば以下のような1つのカラムだけSELECT文で選んだ場合は、
SELECT Last_Name FROM Customers_A
UNION
SELECT Last_Name FROM Customers_B;
以下の結果になります。
Last_Name |
---|
takahashi |
ito |
suzuki |
Last_Nameが重複する場合は排除され、他の行が残りました。
さいごに
今回は、
・SQL UNIONとUNION ALLとの違い
についてまとめました。
また、他にも役に立つ情報がありますので、よろしければご参照頂ければと思います。